package ig.metrica.ui.conexion;

import java.util.ArrayList;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;

import ig.metrica.origenesdedatos.ConexionBean;
import ig.metrica.origenesdedatos.ConexionPK;
import ig.metrica.ui.WizzardSevinproPanel;
import ig.util.ConexionServer;
import ig.util.ejb.IGBean;
import ig.util.excepciones.DatoInvalidoExcepcion;
import ig.util.excepciones.LogicaExcepcion;
import java.awt.Dimension;
import javax.swing.JFrame;

public class PantallaConexion extends WizzardSevinproPanel {

    private PantallaDatosBasicosConexion datosbasicos;
    private ConexionBean conexion;

    public PantallaConexion(JFrame frame) throws Exception {
        super(null);
        this.frame = frame;
        ArrayList pantallas = new ArrayList();
        pantallas.add(datosbasicos = new PantallaDatosBasicosConexion(frame));
        pantallaBusqueda = new PantallaBusquedaConexion(new PantallaDatosBasicosConexion(frame), this);
        setPantallasWizzard(pantallas, pantallaBusqueda);
        setPreferredSize(new Dimension(700, 300));
    }

    protected void adicionarRegistro() throws Exception {

        if (datosbasicos.getNombre().trim().equals("") || datosbasicos.getDriver().trim().equals("")
                || datosbasicos.getURL().trim().equals("") || datosbasicos.getUsuario().trim().equals("")) {
            throw new DatoInvalidoExcepcion("Debe registrarse informacion en todos los campos de la pantalla.");
        }

        //home = (ConexionHome) ctx.lookup("ig.metrica.origenesdedatos.Conexion");
        //conexion = home.create(datosbasicos.getNombre(), datosbasicos.getDriver(), datosbasicos.getURL(), datosbasicos.getUsuario(), datosbasicos.getPassword());
        conexion = new ConexionBean().ejbCreate( datosbasicos.getNombre(), datosbasicos.getDriver(), datosbasicos.getURL(), datosbasicos.getUsuario(), datosbasicos.getPassword() );
        llaveRegistro = new Long[]{conexion.getId()};
    }

    protected void editarRegistro() throws Exception {
        if (datosbasicos.getNombre().trim().equals("") || datosbasicos.getDriver().trim().equals("")
                || datosbasicos.getURL().trim().equals("")) {
            throw new DatoInvalidoExcepcion("Editar: Debe registrarse informacion en todos los campos de la pantalla.");
        }

        conexion.setNombre(datosbasicos.getNombre());
        conexion.setDriver(datosbasicos.getDriver());
        conexion.setUrl(datosbasicos.getURL());
        conexion.setUsuario(datosbasicos.getUsuario());
        conexion.setPassword(datosbasicos.getPassword());
        
        conexion.actualizarEntidad();
    }

    protected void eliminarRegistro() throws Exception {
        conexion.eliminarEntidad();
    }

    protected void cargarRegistro() throws Exception {
        setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
        if (llaveRegistro == null) {
            throw new LogicaExcepcion("No es posible realizar la carga del registro con una llave nula");
        }

        /*Properties prop = new Properties();
        prop.put(Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
        String Sockec = new ConexionServer().getSocketServer();
        prop.put(Context.PROVIDER_URL, Sockec);

        InitialContext ctx = new InitialContext(prop);
        home = (ConexionHome) ctx.lookup("ig.metrica.origenesdedatos.Conexion");*/
        
        conexion = new ConexionBean().ejbFindByPrimaryKey(new ConexionPK(((Long) llaveRegistro[0]).intValue()));

        datosbasicos.setNombre(conexion.getNombre());
        datosbasicos.setDriver(conexion.getDriver());
        datosbasicos.setURL(conexion.getUrl());
        datosbasicos.setUsuario(conexion.getUsuario());
        datosbasicos.setPassword(conexion.getPassword());
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));

    }

    protected void salir() {
    }

    protected void nuevo() {
        btnEditar.setEnabled(false);
        new DDriver(datosbasicos.frame, true, datosbasicos);
    }
}
